package com.lipuwater.agent.app;

import android.app.Application;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;

import com.ismartlib.framework.error.CustomActivityOnCrash;
import com.lipuwater.agent.app.config.AppConfig;
import com.lipuwater.agent.utils.FileUtil;
import com.lipuwater.agent.utils.preferences.PreferencesUtils;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.okhttplib.OkHttpUtils;
import com.umeng.UMUtils;
import com.umeng.analytics.MobclickAgent;

import java.io.File;
import java.util.concurrent.TimeUnit;

import io.realm.Realm;
import io.realm.RealmConfiguration;
import okhttp3.OkHttpClient;


/**
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑
 * 　　　　┃　　　┃永无BUG！
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━神兽出没━━━━━━
 * Created by root on 2016/6/19  11:16.
 * Email:924686754@qq.com
 */
public class AppContext extends Application {

    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        this.context = getApplicationContext();
        init();
        initVersionCode();
        PreferencesUtils.initSharedPreferences(this);
       // PushManager.getInstance().initialize(getApplicationContext(), GeTuiPushService.class);
    }

    public static Context getContext() {
        return context;
    }

    private void init() {
        //内存泄漏检测
        //  LeakCanary.install(this);
        //友盟统计
        MobclickAgent.enableEncrypt(true);
        //初始化分享
        UMUtils.initUMShare();

        initAppExternalFiles();
        configUniversalImageLoader();
        //app奔溃收集
        CustomActivityOnCrash.install(this, AppConfig.DE_BUG);
        //okhttp
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(20000, TimeUnit.MILLISECONDS)
                .readTimeout(20000, TimeUnit.MILLISECONDS)
                .build();
        OkHttpUtils.initClient(okHttpClient);
        //初始化Realm
        Realm.init(this);
        //使用自定义配置
        //64位的KEY，用于加解密数据
        String key = "jlumhxUqVCdJhGwDTDi@jt1ujZ4QULv68Yhex&l3QXsoh^MUJz9udDr52ulok60N";
        RealmConfiguration config = new RealmConfiguration.Builder()
                .name("LP-USER.realm")
                .encryptionKey(key.getBytes())
                .deleteRealmIfMigrationNeeded()
                .build();
        Realm.setDefaultConfiguration(config);
    }

    private void initAppExternalFiles() {
        //创建UIL图片缓存目录
        FileUtil.createFileDir(AppConfig.UIL_Cache_Dir);
        //创建图片目录
        FileUtil.createFileDir(AppConfig.IMAGE_DIR);
    }

    private void configUniversalImageLoader() {
        DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
                .bitmapConfig(Bitmap.Config.RGB_565)
                .imageScaleType(ImageScaleType.EXACTLY).cacheInMemory(true) //
                .cacheOnDisk(true) //
                .build();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration//
                .Builder(this)
                .defaultDisplayImageOptions(defaultOptions)
                .denyCacheImageMultipleSizesInMemory()
                .memoryCacheExtraOptions(480, 800).threadPoolSize(5)
                .threadPriority(4).diskCacheSize(5 * 1024 * 1024)//
                .diskCache(new UnlimitedDiskCache(new File(AppConfig.UIL_Cache_Dir)))// 自定义缓存路径
                .build();//
        ImageLoader.getInstance().init(config);
    }

    /**
     * 获取版本号
     */
    public void initVersionCode() {
        try {
            // 获取本地版本号
            AppConfig.LOCAL_VERSION = getPackageManager().getPackageInfo(
                    getPackageName(), 0).versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
    }
}
